var Movie = require('../models/movie')
var _ = require('underscore') // 用新的数据更新老的数据，underscore的extend方法用新的字段替换老的字段
var Comment = require('../models/comment')
var Category = require('../models/category')
var fs = require('fs') // 读写模块  读写文件是异步的，所以要控制顺序，文件上传好之后，再更新字段
var path = require('path') // 路径模块


// detail page
exports.detail = function(req, res) {
    var id = req.params.id  //  都拿得到的时候，body和 query 在express4中废弃，现在都用params 是一个 object

    Movie.update({_id: id}, {$inc: {pv: 1}}, function(err) {
        if (err) {
            console.log(err)
        }
    })
    Movie.findById(id, function(err, movie) {
        Comment
            .find({movie: id})
            .populate('from', 'name')
            .populate('reply.from reply.to', 'name')
            .populate('reply.from reply.to', 'name')
            .exec(function(err, comments) {
                console.log(comments)
                res.render('detail', {
                    title: 'imooc 详情页',
                    movie: movie,
                    comments: comments
                })
            })
    })
}

// list page
exports.list = function (req, res) {
    Movie.fetch(function (err, movies) {
        if (err) {
            console.log(err)
        }
        res.render('list', {
            title: 'imooc 列表页',
            movies: movies
        })
    })
}

// list delete movie
exports.del = function (req, res) {
    var id = req.query.id

    if(id) {
        Movie.remove({_id: id}, function(err, movie) {
            if(err) {
                console.log(err)
            }
            else {
                res.json({success: 1})
            }
        })
    }
}

// admin update movie
exports.update = function (req, res) {
    var id = req.params.id
    console.log('id', id)
    if (id) {
        Movie.findById(id, function (err, movie) {
            if(err) {
                console.log(err)
            }
            Category.find({}, function (err, categories) {
                if(err) {
                    console.log(err)
                }
                res.render('admin', {
                    title: 'imooc 后台更新页',
                    movie: movie,
                    categories: categories
                })
            })
        })
    }
}
// admin poster
exports.savePoster = function (req, res, next) {
    var posterData = req.files.uploadPoster // 从 input 的 name 值得到 file
    var filePath = posterData.path // 拿文件路径
    var originalFilename = posterData.originalFilename // 拿文件的名字
    console.log(req.files)
    if (originalFilename) { // 判断有文件上传
        fs.readFile(filePath, function (err, data) {
            var timestamp = Date.now() // 生成一个时间戳
            var type = posterData.type.split('/')[1]  // 获取图片类型 png jpg 啥啥的
            var poster = timestamp + '.' + type // 生成图片文件名
            var newPath = path.join(__dirname, '../../', '/public/upload/' + poster)
            // data 是文件的数据  writeFile 处理文件需要好多秒
            fs.writeFile(newPath, data, function (err) {
                // 写入成功后的 poster 挂到 req 上面
                req.poster = poster
                next()
            })
        })
    } else { // 没有文件上传
        next()
    }

}

// admin post movie
exports.save = function (req, res) {
    var id = req.body.movie._id
    var movieObj = req.body.movie
    var _movie
    // savePoster 进入 save
    if (req.poster) { // 如果有上传海报地址, 将 poster 改成 req.poster
        movieObj.poster = req.poster
    }
    if (id) { // 更新
        Movie.findById(id, function (err, movie) {
            if (err) {
                console.log(err)
            }
            // 用新的数据更新老的数据，underscore的extend方法用新的字段替换老的字段
            _movie = _.extend(movie, movieObj)
            _movie.save(function (err, movie) { // 是否有异常，save 过的 movie
                if (err) {
                    console.log(err)
                }
                // 添加之后调转页面
                res.redirect('/movie/' + movie._id)
            })
        })
    }  else {
        _movie = new Movie(movieObj)

        var categoryId = movieObj.category
        var categoryName = movieObj.categoryName

        _movie.save(function(err, movie) {
            if (err) {
                console.log(err)
            }
            if (categoryId) {
                Category.findById(categoryId, function(err, category) {
                    category.movies.push(movie._id)

                    category.save(function(err, category) {
                        res.redirect('/movie/' + movie._id)
                    })
                })
            }
            else if (categoryName) {
                var category = new Category({
                    name: categoryName,
                    movies: [movie._id]
                })

                category.save(function(err, category) {
                    movie.category = category._id
                    movie.save(function(err, movie) {
                        res.redirect('/movie/' + movie._id)
                    })
                })
            }
        })
    }
    // else { // 新增
    //     _movie = new Movie(movieObj)
    //     var categoryId = _movie.category
    //     var categoryName = _movie.categoryName
    //     _movie.save(function (err, movie) { // 是否有异常，save 过的 movie
    //         if (err) {
    //             console.log(err)
    //         }
    //         if (categoryId){
    //             Category.findById(categoryId, function (err, category) {
    //                 category.movies.push(_movie._id)
    //                 category.save(function (err, category) {
    //                     // 添加之后调转页面
    //                     res.redirect('/movie/' + movie._id)
    //                 })
    //             })
    //         } else if (categoryName) {
    //             // 如果有 categoryName 但是没有 categoryId 那么我们新增一个 category
    //             var category = new Category({
    //                 name: categoryName,
    //                 movies: [movie._id]
    //             })
    //             category.save(function (err, category) {
    //                 // 添加之后调转页面
    //                 movie.category = category._id
    //                 movie.save(function (err, movie) {
    //                     res.redirect('/movie/' + movie._id)
    //                 })
    //             })
    //         }
    //     })
    // }
}

// admin page
exports.new = function (req, res) {
    Category.find({}, function (err, categories) {
        if (err) {
            console.log(err)
        }
        res.render('admin', {
            title: 'imooc  后台录入页',
            categories: categories,
            movie:  {
                doctor: '',
                country: '',
                title: '',
                year: '',
                poster: '',
                language: '',
                flash: '',
                summary: ''
            }
        })
        
    })
}
